/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tt.auth;

import com.tt.cards.User.controller.WuserEJB;
import com.tt.cards.User.entity.Wuser;
import com.tt.cards.User.entity.WuserRole;
import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author chyvok
 */
@ManagedBean
@SessionScoped
public class AuthBoundary implements Serializable {

    private static final long serialVersionUID = 1L;
    
    private String password;
    private String username;
    private Wuser currentWuser; 
    
    @EJB
    private WuserEJB wuserEJB;
    
    /** Creates a new instance of authBoundary */
    public AuthBoundary() {
    }
    
    public String loginValidate() throws Exception {
        
        FacesContext fctx = FacesContext.getCurrentInstance();
        
        Wuser wuser = null;
        
        if("".equals(username) || username == null) {
            fctx.addMessage("loginForm:name", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Не указано имя", 
                    "Не указано имя"));
            return null;
        }
        
        wuser = wuserEJB.findFirstByName(username);

        if(wuser == null && "admin".equals(username)) {
            Wuser adminuser = new Wuser();
            adminuser.setName("admin");
            adminuser.setWuserRole(WuserRole.ADMIN);
            adminuser.setPassword("");
            adminuser.setEmail("");
            wuserEJB.create(adminuser);
            wuser = wuserEJB.findFirstByName(username);
        }
        
        if(wuser == null){
            fctx.addMessage("loginForm:name", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Пользователь не найден", 
                    "Пользователь не найден"));
            return null;
        }

        if(wuser.getSuspended()) {
            fctx.addMessage("loginForm:name", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Пользователь заблокирован", 
                    "Пользователь заблокирован"));
            return null;
        }
        
        String wuserPassw = "";
        if(!(wuser.getPassword() == null))
        	wuserPassw = wuser.getPassword();
        	
        if(!(wuserPassw.equals(password))){
            fctx.addMessage("loginForm:password", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Пароль указан неверно", 
                    "Пароль указан неверно"));
            return null;
        }
        
        currentWuser = wuser;
        return "/pages/welcome.faces";
    }

    public void sendPasswordByEmail() {
        Wuser wuser = null;
        FacesContext fctx = FacesContext.getCurrentInstance();
        
        if("".equals(username) || username == null) {
            fctx.addMessage("loginForm:name", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Пользователь не указан", 
                    "Пользователь не указан"));
            return;
        }
        
        wuser = wuserEJB.findFirstByName(username);
        
        if(wuser == null) {
            fctx.addMessage("loginForm:name", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Пользователь не найден", 
                    "Пользователь не найден"));
            return;
        }
        
        String email = wuser.getEmail();
        if(email == null || "".equals(email)) {
            fctx.addMessage("loginForm:email", new FacesMessage(FacesMessage.SEVERITY_ERROR, 
                    "Почтовый адрес пользователя не указан. Обратитесь к администратору.", 
                    "Почтовый адрес пользователя не указан. Обратитесь к администратору."));
            return;
        }
    }

    public String logout() {
        currentWuser = null;
        return "/pages/auth/login.faces";
    }
    
    
    public Wuser getCurrentWuser() {
        return currentWuser;
    }

    public void setCurrentWuser(Wuser currentWuser) {
        this.currentWuser = currentWuser;
    }
    
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

}
